using Godot;
using System;
using Smr;

public partial class 时间管理
{
    private static bool 是否启动 = false;
    private static string 当前日期字符串;

    private static readonly string[] 时辰名称 =
    [
        "子时", "丑时", "寅时", "卯时",
        "辰时", "巳时", "午时", "未时",
        "申时", "酉时", "戌时", "亥时"
    ];

    public static void 启动世界时间计时器(Label 世界时间标签)
    {
        if (是否启动)
        {
            return;
        }
        是否启动 = true;

        当前日期字符串 = 取当前世界日期字符串();
        世界时间标签.Text = 取当前完整时间时辰();

        Timer timer = new();
        世界时间标签.AddChild(timer);
        timer.Timeout += () =>
        {
            游戏存档.已经过的世界时间 += 10;
            世界时间标签.Text = 取当前完整时间时辰();

            if (当前日期字符串 != 取当前世界日期字符串())
            {
                当前日期字符串 = 取当前世界日期字符串();
                游戏管理.玩家实例.置玩家阳寿(-1);
            }
        };
        timer.Start(1.0f);
    }

    private static DateTime 取当前世界时间()
    {
        return 配置.世界初始时间.AddMinutes(游戏存档.已经过的世界时间);
    }

    private static string 获取当前时辰(DateTime 时间)
    {
        int 小时 = 时间.Hour;
        int 时辰索引 = (小时 + 1) / 2 % 12; // 计算时辰索引（23:00-01:00 是子时）
        return 时辰名称[时辰索引];
    }

    private static string 取当前完整时间时辰()
    {
        DateTime 当前时间 = 取当前世界时间();
        return 当前时间.ToString("yyyy-MM-dd HH : mm") + "（" + 获取当前时辰(当前时间) + "）";
    }

    private static string 取当前世界日期字符串()
    {
        return 取当前世界时间().ToString("yyyy-MM-dd");
    }
}
